package veterinaria.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;



import veterinaria.excepcion.DAOExcepcion;

import veterinaria.modelo.Cita;
import veterinaria.util.ConexionBD;

public class CitaDAO extends BaseDAO {

	public Cita insertar(Cita pReg) throws DAOExcepcion {
		String cSql = "Insert Into TCita(CitCodigo,CitFecha,CitHora,CitEstado,MPaciente_PacCodigo,MPaciente_MEspecie_EspCodigo,MPaciente_MRaza_RazCodigo,MPaciente_MCliente_CliCodigo) Values (?,?,?,?,?,?,?,?)";
		Connection cCon = null;
		PreparedStatement cCom = null;
		ResultSet cRst = null;
		try {
			cCon = ConexionBD.obtenerConexion();
			cCom = cCon.prepareStatement(cSql);
			cCom.setInt(1, pReg.getCitCodigo());
			cCom.setString(2, pReg.getCitFecha());            
            cCom.setString(3, pReg.getCitHora());
            cCom.setString(4, pReg.getCitEstado());
            cCom.setInt(5, pReg.getPaciente().getPacCodigo());
            cCom.setInt(6, pReg.getEspecie().getEspCodigo());
            cCom.setInt(7, pReg.getRaza().getRazCodigo());
            cCom.setInt(8, pReg.getCliente().getCliCodigo());
			int nroErr = cCom.executeUpdate();
			if (nroErr != 1) {
				throw new SQLException("No se pudo insertar");
			}
			// Obtener el ultimo id
			int newCod = 0;
			cSql="Select Last_Insert_id()";
			cCom=cCon.prepareStatement(cSql);
			cRst=cCom.executeQuery();
			if (cRst.next()) {
				newCod=cRst.getInt(1);
			}
			pReg.setCitCodigo(newCod);

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(cRst);
			this.cerrarStatement(cCom);
			this.cerrarConexion(cCon);
		}
		return pReg;
	}

	public Cita obtener(int pCod) throws DAOExcepcion {
		Cita cReg = new Cita();
		Connection cCon = null;
		PreparedStatement cCom = null;
		ResultSet cRst = null;
		try {
			String cSql = "Select CitCodigo, CitFecha, CitHora, CitEstado From TCita Where CitCodigo=?";
			cCon=ConexionBD.obtenerConexion();
			cCom=cCon.prepareStatement(cSql);
			cCom.setInt(1, pCod);
			cRst=cCom.executeQuery();
			if (cRst.next()) {
				cReg.setCitFecha(cRst.getString(2) );
				cReg.setCitHora(cRst.getString(3));
				cReg.setCitEstado(cRst.getString(4));
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(cRst);
			this.cerrarStatement(cCom);
			this.cerrarConexion(cCon);
		}
		return cReg;
	}
	
	public void eliminar(int pCit) throws DAOExcepcion {
		String cSql="Delete From TCita Where CitCodigo=?";
		Connection cCon=null;
		PreparedStatement cCom=null;
		try {
			cCon=ConexionBD.obtenerConexion();
			cCom=cCon.prepareStatement(cSql);
			cCom.setInt(1, pCit);
			int i = cCom.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(cCom);
			this.cerrarConexion(cCon);
		}
	}
	
	public Cita actualizar(Cita pReg) throws DAOExcepcion {
		String cSql="UpDate TCita Set CitFecha=?,CitHora=?,CitEstado=?,MPaciente_PacCodigo=?,MPaciente_MEspecie_EspCodigo=?,MPaciente_MRaza_RazCodigo=?,MPaciente_MCliente_CliCodigo=? Where CitCodigo=?";
		Connection cCon=null;
		PreparedStatement cCom=null;
		try {
			cCon=ConexionBD.obtenerConexion();
			cCom=cCon.prepareStatement(cSql);
			cCom.setString(1, pReg.getCitFecha());
			cCom.setString(2, pReg.getCitHora());
			cCom.setString(3, pReg.getCitEstado());
			cCom.setInt(4, pReg.getPaciente().getPacCodigo());
			cCom.setInt(5, pReg.getEspecie().getEspCodigo());
			cCom.setInt(6, pReg.getRaza().getRazCodigo());
			cCom.setInt(7, pReg.getCliente().getCliCodigo());			
			cCom.setInt(8, pReg.getCitCodigo());
			int i = cCom.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(cCom);
			this.cerrarConexion(cCon);
		}
		return pReg;
	}
	
    public Collection<Cita> listar() throws DAOExcepcion {
        Collection<Cita> cLis = new ArrayList<Cita>();
        Connection cCon=null;
        PreparedStatement cCom=null;
        ResultSet cRst=null;
        try {
            cCon = ConexionBD.obtenerConexion();
            String cSql="Select CitCodigo,CitFecha,CitHora,CitEstado,MPaciente_PacCodigo,MPaciente_MEspecie_EspCodigo,MPaciente_MRaza_RazCodigo,MPaciente_MCliente_CliCodigo From TCita Order By CitFecha";
            cCom=cCon.prepareStatement(cSql);
            cRst=cCom.executeQuery();
            while (cRst.next()) {
                Cita cReg=new Cita();
                cReg.setCitFecha(cRst.getString("CitFecha"));
                cReg.setCitHora(cRst.getString("CitHora"));
                cReg.setCitEstado(cRst.getString("CitEstado"));
                cLis.add(cReg);
            }
        } catch (SQLException e) {
            System.err.println(e.getMessage());
            throw new DAOExcepcion(e.getMessage());
        } finally {
            this.cerrarResultSet(cRst);
            this.cerrarStatement(cCom);
            this.cerrarConexion(cCon);
        }
        return cLis;
    }	
    
    
    public Collection<Cita> buscarPorCodigo(String pCod) throws DAOExcepcion {
         String sqlDoc="Select CitCodigo,CitFecha,CitHora,CitEstado,CitFlg,MPaciente_PacCodigo,MPaciente_MEspecie_EspCodigo,MPaciente_MRaza_RazCodigo,MPaciente_MCliente_CliCodigo From TCita Where CitCodigo Like ?";
        Collection<Cita> lisDoc=new ArrayList<Cita>();
        Connection conDoc=null;
        PreparedStatement comDoc=null;
        ResultSet rstDoc=null;
        try {
            conDoc=ConexionBD.obtenerConexion();
            comDoc=conDoc.prepareStatement(sqlDoc);
            comDoc.setString(1, "%" + pCod + "%");
            rstDoc=comDoc.executeQuery();
            while (rstDoc.next()) {
                Cita regDoc = new Cita();
                regDoc.setCitCodigo(rstDoc.getInt("CitCodigo"));
                regDoc.setCitFecha(rstDoc.getString("CitFecha"));
                lisDoc.add(regDoc);
            }
        } catch (SQLException e) {
            System.err.println(e.getMessage());
            throw new DAOExcepcion(e.getMessage());
            
        } finally {
            this.cerrarResultSet(rstDoc);
            this.cerrarStatement(comDoc);
            this.cerrarConexion(conDoc);
        }
        System.out.println(lisDoc.size());
        return lisDoc;
    
    
    
  
    
    
    
}
}   
